package ControlCliente;

import ComunicacionCliente.Cliente;
import PantallasCliente.*;

public class ManejadorCrearPartida {

/************atributos*******************************************/
    private ManejadorPrincipal mp;
    private ManejadorMensajesSalida mms;
    private PantallaCrearPartida pantallaCrearPartida;
    private PantallaEsperandoCrearPartida PantallaEsperandoCrearPartida;
    private Cliente cliente;

    private boolean partidaCreada;
    
    private int cantJugadores;
    private int tipoEscenario;
    private String ip;
/****************************************************************/

/************metodos*********************************************/
    public ManejadorCrearPartida(){}

    public ManejadorCrearPartida(ManejadorPrincipal mp, ManejadorMensajesEntrada mme, ManejadorMensajesSalida mms ) {
        this.mp = mp;                   //copia las referencias a variables locales, mme no lo copia ya que no la necesita en el futuro.
        this.mms = mms;
        mme.setManejadorCrearPartida(this); //le pasa su referencia al ManejadorMensajesEntrada.
        desplegarPantallaCrearPartida ();
    }

    public void generadorPartida () {
        tipoEscenario = pantallaCrearPartida.getTipoEscenario(); //copia los valores ingresados por el usuario de la PantallaCrearPartida.
        cantJugadores = pantallaCrearPartida.getCantJugadores();
        ip = pantallaCrearPartida.getIP();

        cliente = new Cliente(ip, 8001);
        mms.setCliente(cliente);

        mms.MsjCrearPartida (tipoEscenario, cantJugadores, ip); //le envia los datos de la partida a crear al ManejadorMensajesSalida.

        desplegarPantallaEsperandoCrearPartida(); //despliega una pantalla de espera hasta que llege la confirmacion del servidor.
    }

    public void recibePartidaCreada (boolean partidaCreada) {
        this.partidaCreada = partidaCreada;
        if (partidaCreada) desplegarPantallaPartidaCreada(); //chequeo el msjACK enviado por el servidor y contesto abriendo una pantalla segun si se creo o no la partida con exito.
        else desplegaPantallaErrorCrearPartida();
    }

    public void desplegarPantallaCrearPartida () {
        pantallaCrearPartida=new PantallaCrearPartida (this); //tiene un boton aceptar para crear la partida (una vez ingresado los datos y un boton cancelar para volver a la PantallaPrincipal.
    }

    private void desplegarPantallaEsperandoCrearPartida() {
        PantallaEsperandoCrearPartida=new PantallaEsperandoCrearPartida(); //ventana sin botones que solo muestra que se esta creando la partida. Despues la pantallaPartidaCreada o la pantallaErrorCrearPartida la superponen.
    }

    public void desplegarPantallaPartidaCreada () {
        PantallaEsperandoCrearPartida.ocultarPantalla();
        new PantallaPartidaCreada(this);  //solo tiene el mensaje y un boton aceptar para volver a la pantallaPrincipal
    }

    private void desplegaPantallaErrorCrearPartida() {
        PantallaEsperandoCrearPartida.ocultarPantalla();
        new PantallaErrorCrearPartida(this); //solo tiene el mensaje y un boton aceptar para volver a la pantallaCrearPartida
    }

    public void mostrarPantallaCrearPartida(){
        pantallaCrearPartida.mostrarPantalla();
    }

    public void mostrarPantallaPrincipal(){
        mp.mostrarPantallaPrincipal();
    }

/****************************************************************/
}
